perm filename WRTPAG.F4[PAG,LCS]3 blob
sn#374027 filedate 1978-08-14 generic text, type T, neo UTF8
00100 COMMENT ā VALID 00002 PAGES
00200 C REC PAGE DESCRIPTION
00300 C00001 00001
00400 C00002 00002 SUBROUTINE WRTPAG
00500 C00017 ENDMK
00600 Cā;
00100 SUBROUTINE WRTPAG
00200 DATA SLSP/12.0/
00300 COMMON /FIN/JBAR,NPX,REND,KPX,KREAD,JEND,JSLUR,JSL2,NAMZ
00400 1,LC,LPG,MPG,CLEF,SIG,LB,SPG,MTR1,MTR2
00500 1 /SF/KL,RT,KP,SIZE,NAMX,EXT /IPG/IPG
00600 1 ,JPG,BRACK(0/7),RSTNUM(8),RPSZ(8),RHGT(8),RCLEF(0/7)
00700 1 /RSP/KNM(1) /ENDL/ENDLN,N,NAME,NMPG,T /KBAR/KBAR(515)
00800 1 /RCLF/KK,CL,KW,ITEM,RSTAFF,SN,YN,RNAM,RNAM2,ITR
00900 COMMON RS,JA,CLEFQ,AA,RQ(16),KQ,NQ,JQ,JJQ,KBQ,NAQ
01000 COMMON/STF/RSTFAC(0/7),RSTJ2 /IVV/IV(1) /KNUM/KNUM
01100 COMMON /POSI/STFF(0/7),JJ2,JPQ /LLL/L,LL,I,RXQ
01200 1/PX/KPN(1) /Q/Q(1) /PTR/KWDS(1) /XRN/RN(1) /NBAR/NBAR(1)
01300 1/BRJ/JTOT,TURN,NB,DSK,PGLNTH
01400 DIMENSION ENDSTF(450)
01500 C ENDSTF AND ENDPTR FOR CARRYING STUFF FROM ONE LINE TO THE NEXT.
01600 EQUIVALENCE (RQ(2),R4),(R5,RQ(3)),(R7,RQ(5))
01700 1,(R8,RQ(6)),(LCNT,IV(45)),(NDPY,IV(46)),(ENDSTF,KBAR(4))
01800 DATA VERT/0.045/
01900 C VERT IS BASIC VERTICAL UNIT SIZE IN INCHES
02000 IF(MPG.NE.0)GO TO 4
02100 DO 1 K=1,100
02200 1 IF(NBAR(K).EQ.0)GO TO 3
02300 3 MPG=K-1
02400 C SETS NUMB. OF LINES ON FIRST PAGE
02500 4 IF(SPG.EQ.0)SPG=PGLNTH/MPG
02600 RS=SIZE*17.5
02700 HX=0
02800 CC RA=(RSTJ2*SIZE)/RPSZ(1)
02900 RA=RPSZ(JPG)
03000 C SAVE SIZE OF TOP STAFF FOR LATER
03100 DO 141 K=1,JPG
03200 RB=RSTNUM(K)
03300 C ADJUSTS DIST. BETWEEN STAVES DEPENDING ON SIZE FACTOR.
03400 RHGT(K)=RHGT(K)+RB*(RS-17.5)
03500 CC RPSZ(K)=RPSZ(K)*RA
03600 141 RPSZ(K)=RPSZ(K)*SIZE
03700 CC141 HX=HX+(RHGT(K)+17.5)*RPSZ(K)*RT
03800 CZZ HX=(17.5*RSTNUM(JPG)+17.5)*VERT
03900 HX=(17.5*RSTNUM(JPG)+17.5+RHGT(JPG)*RA)*VERT
04000 C HX=TOTAL HEIGHT IN INCHES. THIS ASSUMES RSTNUM(JPG) IS HIGHEST STAFF NUM.
04100 C ALSO ASSUMES HIGHEST STAFF NUM. IS REALLY ABOVE ALL OTHERS.
04200 143 IF(HX.LE.SPG)GO TO 140
04300 HX=SPG/HX
04400 C GET THE FACTOR FOR SPACE BETWEEN STAVES
04500 CZZ DO 142 K=1,LPG
04600 CZZ RA=17.5*RSTNUM(K)
04700 CZZ142 RHGT(K)=RA*HX-RA
04800 RA=1/HX
04900 DO 142 K=1,JPG
05000 SP=RHGT(K)
05100 IF(SP)GO TO 1142
05200 C MULT +S * <1, -S * >1 TO REDUCE SIZE
05300 SP=SP*HX
05400 GO TO 142
05500 1142 SP=SP*RA
05600 142 RHGT(K)=SP
05700 CC142 RHGT(K)=(RA+RHGT(K))*HX-RA
05800 140 NPG=1
05900 NMPG='PAGEA'
06000 HORZ=96.
06100 IF(KNUM.GT.0)KNUM=KNUM-1
06200 C FOR PAGE NUMS.
06300 IF(MOD(KNUM,2).NE.0)HORZ=-HORZ
06400 RNUM=0.+KNUM
06500 LB=0
06600 ITR=LL
06700 C TRANSPOSE IS IN LL
06800 RA=0
06900 JEND=-1
07000 METR=1000
07100 CLEF=-99
07200 JSLUR=0
07300 LC=1
07400 KREAD=128
07500 SIG=CLEF
07600 HX=2
07700 KQ=1
07800 KPX=1
07900 CALL FILOUT
08000 C NAMQ AND NPG ARE SET IN FILOUT
08100 SP=2.45
08200 C DEFAULT VERT. SPACE UNITS
08300 ENDSTF(1)=0
08400 IF(N.EQ.0)GO TO 100
08500 C SPACED OUT DEPENDING ON NUM OF LINES
08600 HX=N
08700 SP=SP+(HX-2.)*.11
08800
08900 100 CALL FILEIN
09000
09100 320 CALL STAVES
09200 CC IF(IPG)GO TO 3000
09300 IF(NPG.NE.1)GO TO 3000
09400 RT=RSTNUM(JPG)
09500 RS=100.+HORZ
09600 HORZ=-HORZ
09700 RNUM=RNUM+1
09800 C ADDS PAGE NUMBER. SIZE(P6)=1.1 P7=3 SO PARTS PROG. WILL IGNORE IT.
09900 CALL STAFF(5.,10.,RS,28.,RNUM,1.1,3.0,0,0,0,0,0)
10000 3000 IF(ITR.NE.0)CALL TRNSP
10100 JPQ=KL
10200
10300 NA=0
10400 KPT=1
10500 ENDSTF(1)=0
10600 C LOOP STARTS HERE *******
10700 131 NA=NA+1
10800 KWDS(KP)=JPQ
10900 KP=KP+1
11000 R=CODEN(KPN,NA,Q,JK)
11100 RR=Q(JK+6)
11200 RS=Q(JK)
11300 IF(R.NE.5)GO TO 935
11400 R8=-1
11500 IF(RS.GE.6)R8=Q(JK+8)
11600 IF(RR)GO TO 735
11700 IF(RR.LE.Q(JK+3))RR=202.
11800 GO TO 235
11900 C CATCHES SLURS, TRILLS, 8VA, LINES THAT GO PAST END OF LINE.
12000 935 IF(R.EQ.7)GO TO 835
12100 IF(R.NE.44)GO TO 35
12200 R=R/11.
12300 Q(JK+1)=R
12400 C INFOR FOR P9 AND L10 OF DASHES AND WIGGLES NOT KEPT YET!!!!!!!
12500 IF(RR.LT.Q(JK+3))GO TO 30
12600 C NEEDED WHEN DATA ON LINE HAS BEEN EXPANDED, NOT CONTRACTED.
12700 835 R8=0
12800 R7=0
12900 IF(RS.GE.6)R8=Q(JK+8)
13000 235 IF(RR.LT.199.)GO TO 30
13100 C P1,P2,P3,P4,P5,P6,P7,P8 ARE SAVED.
13200 RR=-1
13300 735 IF(RS.GE.5)R7=Q(JK+7)
13400 ENDSTF(KPT)=6
13500 ENDSTF(KPT+1)=R
13600 C=Q(JK+2)
13700 ENDSTF(KPT+2)=C
13800 ENDSTF(KPT+3)=1
13900 ENDSTF(KPT+4)=Q(JK+4)
14000 ENDSTF(KPT+5)=Q(JK+5)
14100 ENDSTF(KPT+7)=R7
14200 ENDSTF(KPT+8)=R8
14300 ENDSTF(KPT+6)=RR
14400
14500 236 KPT=KPT+13
14600 ENDSTF(KPT)=0
14700 Q(JK+6)=202
14800 GO TO 30
14900 C*************
15000 35 IF(R.NE.2)GO TO 36
15100 IF(RS.EQ.7)GO TO 30
15200 C SKIP ALL THIS IF NEW CENTERING (P9 NOW HAS POS.)
15300 IF(RS.LT.6.)GO TO 30
15400
15500 RR=RIGHT(NA,-1,JK)
15600 Q(JK+3)=RR-1.6*RSTJ2+(RIGHT(NA,1,JK)-RR)/2.
15700 C FUNCTION 'RIGHT' FINDS ITEMS TO LFT AND RT OF REST FOR CENTERING.
15800 C CENTERS WHOLE REST
15900 GO TO 30
16000 36 IF(R.NE.3)GO TO 34
16100 CLEF=CLEFN(Q,JK)
16200 LL=Q(JK+2)
16300 C GETS CLEF FOR PAGE LAYOUT
16400 RCLEF(LL)=CLEF
16500 GO TO 30
16600 34 IF(R.NE.17)GO TO 37
16700 SIG=Q(JK+5)
16800 IF(ABS(SIG).GT.100.)SIG=-99
16900 C DO NOT REPEAT KSIG MADE UP OF NATURALS.
17000 CXX IF(Q(JK).GT.3)SIG=SIG+Q(JK+6)*100.
17100 CXX CLEF # IN P6 WITH KEY SIGS.
17200 C NEXT CHANGES CODE NUM BACK TO ORIGINAL
17300 37 IF(R.LT.33)GO TO 130
17400 38 Q(JK+1)=R/11.
17500 GO TO 30
17600 130 IF(Q(JK+3).LT.199)GO TO 30
17700 IF(R.NE.18)GO TO 30
17800 KKK=K+1
17900 R3=9
18000 IF(SIG.NE.-99)R3=14
18100 KK=JK
18200 435 LL=KPN(KKK)
18300 C WDCNT,P1,P2,P3,P4,P5,P6,P7,P8
18400 ENDSTF(KPT)=Q(KK)
18500 ENDSTF(KPT+1)=R
18600 ENDSTF(KPT+2)=Q(KK+2)
18700 ENDSTF(KPT+3)=R3
18800 DO 535 JJ2=4,12
18900 535 ENDSTF(KPT+JJ2)=Q(KK+JJ2)
19000 KPT=KPT+13
19100 ENDSTF(KPT)=0
19200
19300 RS=Q(LL+1)
19400 IF(RS.LE.4)GO TO 30
19500 R4=Q(LL+2)
19600 C SAVE THE STAFF NUM. IN R4
19700 IF(RS.NE.18)GO TO 7011
19800 335 R3=R3+6
19900 KK=LL
20000 KKK=KKK+1
20100 GO TO 435
20200 7011 RS=CODEN(KPN,KKK+1,Q,LL)
20300 IF(RS.LE.4)GO TO 30
20400 IF(Q(LL+2).NE.R4)GO TO 30
20500 IF(RS.EQ.18)GO TO 335
20600 30 JPQ=KPN(NA+1)-KPN(NA)+JPQ
20700 IF(NA.LT.I)GO TO 131
20800 C END OF LOOP ****************
20900
21000 CALL PSHFT(I)
21100 C NEXT GETS RID OF USELESS SLURS (NO LENGTH)
21200 K=1
21300 441 IF(CODEN(KWDS,K,RN,J).NE.5)GO TO 41
21400 IF(ABS(RN(J+6)-RN(J+3)).GT..2)GO TO 41
21500 C NEXT DELETES THE SLUR
21600 LL=RN(J)+3
21700 DO 241 NA=J,JPQ
21800 241 RN(NA)=RN(NA+LL)
21900 JPQ=JPQ-LL
22000 CCC LL=KPN(K+2)-KPN(K+1)-LL
22100 I=I-1
22200 KP=KP-1
22300 DO 341 NA=K+1,KP
22400 341 KWDS(NA)=KWDS(NA+1)-LL
22500 GO TO 441
22600 41 K=K+1
22700 IF(K.LT.KP-1)GO TO 441
22800
22900 RS=-1
23000 C -1 FOR ALL STAVES AT ONCE IN GETPTS.
23100 CCC RS=RT
23200 LL='J'
23300 R4=0
23400 R5=200
23500 NA=L
23600 L=KP-1
23700 DO 146 K=0,JPG-1
23800 146 RSTFAC(K)=RSTFAC(K)*SIZE
23900 C GETS PROPER SIZE FACTORS FOR JUSTIFY SUBR.
24000 CALL PTMOVE(RN,KWDS)
24100
24200 C START LAST LOOP *******
24300 CC DO 47 JJ2=1,KP
24400 CC LL=KWDS(JJ2)
24500 CC AA=RN(LL+1)
24600 CC IF(AA.NE.10.AND.AA.NE.16)GO TO 1047
24700 CN IF(AA.NE.10.AND.AA.NE.16)GO TO 347
24800 C***** SKIP NEXT FOR NOW ******* 1/28/78
24900 CC GO TO 47
25000 CC DO 147 NN=JJ2+1,KP
25100 CC MM=KWDS(NN)
25200 CC IF(RN(MM+1).NE.16)GO TO 147
25300 C FOUND THE NEXT TEXT AFTER TEXT OR NUMB.
25400 CC IF(RN(MM).EQ.8)GO TO 47
25500 C JUMP IF POS. IS ALREADY TAKEN CARE OF.
25600 CC IF(AA.EQ.10)GO TO 247
25700 C NEXT FOR TEXT FOLLOWING TEXT
25800 CC IF(ABS(RN(MM+4)-RN(LL+4)).GE.4)GO TO 47
25900 C JUMP IF ON DIFF. VERT. PLANE.
26000 CC AA=(RN(LL+9)+4.)*RSTJ2*RN(LL+5)+RN(LL+3)
26100 C SETS MINIMUM SPACE.
26200 CC IF(RN(MM+3).LT.AA)RN(MM+3)=AA
26300 CC GO TO 47
26400 CC247 IF(ABS(RN(MM+4)-RN(LL+4)).GT.6)GO TO 47
26500 C CHECKS VERT. POS.
26600 CC AA=RN(LL+4)+7
26700 CC IF(RN(MM+4)-AA.LT.0)RN(MM+4)=AA
26800 C MOVE WORD TO RIGHT OF NUMBER IF IT WAS TOO CLOSE
26900 CC GO TO 47
27000 CC147 CONTINUE
27100 CC GO TO 47
27200 CC1047 IF(AA.NE.6)GO TO 47
27300 CC IF(RN(LL).LT.7)GO TO 47
27400 CC IF(RN(LL+9).GT.200.)RN(LL+9)=0
27500 C ********** FIX THIS IN GETPTS, MOVER. IT SHOULDN'T MOVE P9 ALWAYS.
27600 CC47 CONTINUE
27700
27800 2 KWDS(KP)=JPQ
27900 CP J=1
28000 IF(KP.GE.300.OR.JPQ.GE.2500)TYPE 20,KP,JPQ
28100 JJ2=KP+1
28200 C WRITES 1 EXTRA WORD
28300 CP JPQ=KB
28400
28500 DO 12 K=1,KP
28600 CC N=KWDS(K)
28700 CC R=RN(N+1)
28800 R=CODEN(KWDS,K,RN,N)
28900 IF(R.LE.2)GO TO 22
29000 C ONCE IT FINDS A REST OR NOTE IT MUST HAVE GONE TOO FAR.
29100 IF(R.GT.7)GO TO 12
29200 IF(R.EQ.5)GO TO 52
29300 IF(R.NE.4)GO TO 62
29400 IF(RN(N).GE.4)GO TO 52
29500 62 IF(R.NE.7)GO TO 12
29600 52 A=RN(N+6)
29700 C J HAS NOTE COUNT TO FIND POS OF RIGHT END OF SLUR.
29800 IF(A.GE.0)GO TO 12
29900 J=A
30000 IF(J.EQ.0)J=-1
30100 B=RN(N+2)
30200 C B=STAFF NUM.
30300 JJ=0
30400
30500 DO 32 KK=K+1,KP
30600 CC NN=KWDS(KK)
30700 CC A=RN(NN+1)
30800 A=CODEN(KWDS,KK,RN,NN)
30900 IF(A.NE.1)GO TO 32
31000 IF(B.NE.RN(NN+2))GO TO 32
31100 D=RN(NN+3)
31200 JJ=JJ-1
31300 IF(J.NE.JJ)GO TO 42
31400 RN(N+6)=D+(D-A)*(RN(N+6)-J)
31500 C FOUND NOTE FOR POSITION.
31600 GO TO 12
31700 42 A=D
31800 32 CONTINUE
31900 12 CONTINUE
32000
32100 22 CALL PUTEXT(NAMX,EXT)
32200 LCNT=0
32300 CC NDPY=0
32400 RSTFAC(99)=0
32500 C MUST BE 0 IN MS TO MAKE DISPLAY
32600 CALL EXTOUT(RSTFAC,128)
32700 CALL EXTOUT(KWDS,JJ2)
32800 CALL EXTOUT(RN,JPQ)
32900 TYPE 101,NAMX,EXT
33000 NAMX=NAMX+2
33100 CC IF(IPG)GO TO 6011
33200 NPG=NPG+1
33300 IF(NBAR(LC).NE.0)GO TO 220
33400 KK=LC+1
33500 IF(NBAR(KK).EQ.0)GO TO 220
33600 CHECK FOR ZEROS WHICH ARE PAGE MARKS.
33700 LC=LC+1
33800 221 KK=KK+1
33900 IF(NBAR(KK).NE.0)GO TO 221
34000 C FIND NEW MPG
34100 MPG=KK-LC
34200 NPG=1000
34300 SPG=10./MPG
34400 JEND=0
34500 C RESET ABOVE
34600 220 IF(NPG.LE.MPG)GO TO 6011
34700 NPG=1
34800 C RESET, UPDATE FILENAMES
34900 NAMX=NAMZ+256
35000 NAMZ=NAMX
35100 6011 NAMQ=NAMX
35200 CALL FINEXT
35300 GO TO 100
35400 C IPG=1 = GO BACK TO TRONLY INSTEAD
35500 101 FORMAT(1XA5,'.',A3)
35600 20 FORMAT(' TOO MUCH DATA!!! ',I3,'/300',I5,'/2500')
35700 END